﻿import numpy as np

np.random.seed(42)

# 数据
X = 2*np.random.rand(100,1)
y = 4+3*X+np.random.randn(100,1)

# 增加一列，用于求解偏置项b
X_b = np.c_[(np.ones((100,1)), X)]

# 批量梯度下降
eta = 0.1 # 学习率
n_iterations = 1000 # 迭代次数
m = 100 # 样本数
np.random.seed(0)
theta = np.random.randn(2,1) # 随机初始化参数
for iteration in range(n_iterations):
    gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)
    theta = theta - eta * gradients
print(theta) # [[4.21509616], [2.77011339]]